#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFormLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QCheckBox>
#include <QLabel>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include "configmanager.h"
#include <QTimer>
#include <QSettings>
#include <QCoreApplication>
#include <QDir>
#include "app_version.h"
#include "apimanager.h"
#include "securetokenmanager.h"
#include <QStyle>

/**
 * @brief 登录对话框类
 *
 * 提供用户认证功能，包括：
 * - 用户界面：现代化的登录对话框设计
 * - 安全保护：多重反调试和完整性检查
 * - 设备管理：跨平台的机器ID生成和管理
 * - 配置管理：用户设置的持久化存储
 * - 错误处理：完善的错误提示和处理机制
 * - 用户状态：试用/付费用户的区分和管理
 */
class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    explicit LoginDialog(QWidget *parent = nullptr);
    ~LoginDialog();

    // 获取认证结果
    QString token() const { return m_token; }
    QString apiBase() const { return m_apiBase; }
    QString email() const { return m_email; }
    QString deviceName() const { return m_deviceName; }

    // 自动登录检查
    bool autoLoginAtStartup();

    // 静态用户状态访问
    static bool isTrialUser() { return s_isTrialUser; }

    // 更新登录状态（外部调用）
    static void updateUserStatus(bool isTrial) { s_isTrialUser = isTrial; }

private slots:
    void onLoginClicked();
    void onRequestFinished();
    void onRegisterLinkClicked();
    void onRememberEmailChanged(int state);
    void onRememberPasswordChanged(int state);

private:
    // UI初始化
    void setupUI();
    void setupStyles();
    void setupConnections();

    // 数据管理
    void loadFromIni();
    void saveToIni();

    // 登录流程
    QByteArray buildLoginPayload() const;
    void performLogin();
    bool validateInput();

    // 安全检查
    bool validateAuthIntegrity();
    void protectAuthData();

    // 状态显示
    void showStatus(const QString& message, const QString& type = "info");
    void setLoginEnabled(bool enabled);

    // 设备信息
    QString generateDeviceName() const;
    QString generateUserAgent() const;
    QString getOSInfo() const;
    QString getPlatformString() const;

private:
    // UI控件
    QVBoxLayout* m_mainLayout;
    QFormLayout* m_formLayout;
    QHBoxLayout* m_buttonLayout;
    QHBoxLayout* m_optionLayout;

    QLineEdit* m_editEmail;
    QLineEdit* m_editPassword;
    QLineEdit* m_editApiBase;        // 隐藏字段
    QLineEdit* m_editDeviceName;     // 隐藏字段

    QCheckBox* m_checkRememberEmail;
    QCheckBox* m_checkRememberPassword;

    QPushButton* m_btnLogin;

    QLabel* m_labelStatus;
    QLabel* m_labelRegister;

    // 网络请求
    QNetworkAccessManager m_nam;
    QNetworkReply* m_reply;

    // API管理器（新API规范）
    ApiManager* m_apiManager;

    // 认证数据
    QString m_token;
    QString m_apiBase;
    QString m_email;
    QString m_deviceName;

    // 用户状态（静态，全局共享）
    static bool s_isTrialUser;
};

#endif // LOGINDIALOG_H